package march.firstmarch22.march03;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.*;

public class Reducer03 extends Reducer<Text,Text, NullWritable,Text> {
    @Override
    protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {

        HashMap<String, Integer> map = new HashMap<>();
        //名字和对应最高分数放在map中
        for (Text value : values) {
            int max = 0;
            String[] split = value.toString().split(",");
            int length = split.length;
            String name = split[1];

            // 取出一条记录中的所有成绩中的最高成绩，需要考虑split长度
            for (int i = length - 1; i > 1; i--) {
                 max = Math.max(Integer.parseInt(split[i]),max);
            }
            map.put(name,max);
        }
        //Map对象化填充到List中，进行排序
        List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet());

        //使用集合工具类Collections进行排序
        list.sort((o1, o2) -> o2.getValue() - o1.getValue());

        //取出排序中第一个元素，也就是分数最高的姓名
        for (Map.Entry<String, Integer> entry : list) {
            String res = "课程名：" + key.toString() + ",姓名：" + entry.getKey() +"，最高分："+entry.getValue();
            context.write(NullWritable.get(),new Text(res));
            break;

        }
    }
}
